// pages/songDetail/songDetail.js

import PubSub from 'pubsub-js'
import moment from 'moment'
import request from '../../utils/request'
//获取全局实例
const appInstance = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay: false, // 音乐是否播放
    song: {},
    musicId: '', // 音乐Id
    musicLink: '',  // 当前音乐链接
    currentTime: '00:00',
    durationTime: '00:00',
    currentWidth: 0, // 实时进度条宽度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    //  options 接受 路由跳转的 query 参数
    // 原生小程序对参数长度有限制，参数过长，自动截取掉
    // console.log(JSON.parse(options.song));  // 报错
    console.log(options);
    let musicId = options.musicId;
    this.setData({
      musicId
    })
    // 获取音乐详情
    this.getMusicInfo(musicId);

    /**
     * 问题: 用户操作系统的控制音乐播放/暂停的按钮 ，页面不知道，导致页面显示是否播放的装填和真实的音乐播放状态不一样
     *  1. 通过控制音频的实例 backgroundAudioManager 去监视音乐播放/暂停
     */
    // 判断当前页面音乐在播放
    if(appInstance.globalData.isMusicPlay && appInstance.globalData.musicId === musicId){
      // 修改当前页面音乐播放状态为 true
      //修改当前页面音乐播放状态
      this.setData({
        isPlay: true
      })
    }
      // 创建控制音乐播放的实例
      this.backgroudAudioManger = wx.getBackgroundAudioManager();
    // 监视音乐播放/暂停
    this.backgroudAudioManger.onPlay(()=>{
      // 修改音乐状态
      this.changePlayState(true);
      // 修改全局音乐id
      appInstance.globalData.musicId = musicId;

    });
    this.backgroudAudioManger.onPause(()=>{
      this.changePlayState(false);
     
    });
    this.backgroudAudioManger.onStop(()=>{
      this.changePlayState(false);
    
    });
    // 监听音乐播放自然结束
    this.backgroudAudioManger.onEnded(()=>{
       //切歌
      //  PubSub.publish('switchMusic','next')
       // 关闭当前播放的音乐
    this.backgroudAudioManger.stop();
    PubSub.subscribe('musicId',(msg,musicId)=>{
      console.log(musicId);
      // 获取音乐详情信息
      this.getMusicInfo(musicId);
      // 自动播放当前的音乐
      this.musicControl(true,musicId);

      // 取消订阅
      PubSub.unsubscribe('musicId');
    })
      PubSub.publish('switchType', 'next')
      this.setData({
        currentWidth: 0,
        currentTime: '00:00'
      })
    });
    // 监听音乐实时播放的速度
    this.backgroudAudioManger.onTimeUpdate(()=>{
      // console.log('总时长',this.backgroudAudioManger.duration)
      // console.log('实时时长',this.backgroudAudioManger.currentTime);
      // 格式化实时时间
      let currentTime = moment(this.backgroudAudioManger.currentTime*1000).format('mm:ss');
      let currentWidth = this.backgroudAudioManger.currentTime/this.backgroudAudioManger.duration * 450;
      this.setData({
        currentTime,
        currentWidth
      })
    })
  },
  // 封装播放状态功能函数
  changePlayState(isPlay){
    this.setData({
      isPlay
    })
    // 修改全局音乐播放状态
    appInstance.globalData.isMusicPlay = isPlay;

  },

  // 获取音乐详情的功能函数
  async getMusicInfo(musicId) {
    let songData = await request('/song/detail', {
      ids: musicId
    });
    // songData.song[0].dt
    let durationTime = moment(songData.songs[0].dt).format('mm:ss')
    this.setData({
      song: songData.songs[0],
      durationTime
    })
    // 动态修改窗口标题
    wx.setNavigationBarTitle({
      title: this.data.song.name,
    })
  },


  //点击暂停/播放的回调
  handleMusicPlay() {
    //修改是否播放的状态
    let isPlay = !this.data.isPlay;
    // this.setData({
    //   isPlay: isPlay
    // })
    let {
      musicId,
      musicLink
    } = this.data;
    // this.musicControl(isPlay,musicId);
    this.musicControl(isPlay, musicId,musicLink);
  },
  // 控制音乐播放/暂停的功能函数
  async musicControl(isPlay, musicId,musicLink) {
    // 创建控制音乐播放的实例
    // let backgroudAudioManger = wx.getBackgroundAudioManager();
    
    // 使用 背景音频
    if (isPlay) { // 播放
      if(!musicLink){
         // 获取音乐播放链接
      let musicLinkData = await request('/song/url', {
        id: musicId
      });
       musicLink = musicLinkData.data[0].url;
        this.setData({
          musicLink
        })
      }
     
      // 设置 歌曲链接  歌曲名(必填)
      setTimeout(()=>{
        this.backgroudAudioManger.src = musicLink;
        this.backgroudAudioManger.title = this.data.song.name;
      },1000)
      
    } else { // 暂停音乐
      this.backgroudAudioManger.pause();
    }
  },

  // 点击切换歌曲
  handleSwitch(event){
    // 获取切歌类型
    // console.log(event);
    let type = event.currentTarget.id
    // 关闭当前播放的音乐
    this.backgroudAudioManger.stop();
    PubSub.subscribe('musicId',(msg,musicId)=>{
      console.log(musicId);
      // 获取音乐详情信息
      this.getMusicInfo(musicId);
      // 自动播放当前的音乐
      this.musicControl(true,musicId);

      // 取消订阅
      PubSub.unsubscribe('musicId');
    })

    // 发布消息数据给 recommendSong 页面
    PubSub.publish('switchType', type);
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})